package dsc;


import java.net.*;
import java.util.logging.Logger;

/*
 * Dit is de listener. Deze roept de message creator die het in het array zet.
 * Dit doen we omdat  er geen inconsistenties in de array komen. Dus daarom
 * laten we de message creator het zelf erin zetten zodat hij zelf ook de enige is
 * die er dingen uit haalt.
 */
 class Listener extends Thread {

    byte[] receiveData = new byte[1024];
    DatagramSocket dSocket;
    MessageHandler dHandler;
    Logging logI;
    Logger logger;
    /*
     * ik weet nog niet of hij het zelf in de queue zet of niet, want het gaat 
     * raar doen als hij erin zet en de message handler er uit haalt.
     */

    protected Listener(DatagramSocket socket, MessageHandler handler) {
        dSocket = socket;
        dHandler = handler;
    }

    public void run() {
        /* Maak logger aan */
        logI = new Logging(Listener.class.getName());
        logger = logI.createLogger();

        try {
            logI.init(logger);
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            while (!isInterrupted()) {
                byte[] receiveData = new byte[1024];
                DatagramPacket receivePacket =
                        new DatagramPacket(receiveData, receiveData.length);

                dSocket.receive(receivePacket);

                logger.info("Ik heb een pakket ontvangen");

                if (receivePacket.getData().length >= 6) {
                    dHandler.addMessageToMessageQueue(receivePacket);
                    logger.info(MessageHandler.byteArrayToString(MessageHandler.getMessageFromDatapacket(receivePacket)));
                    logger.info("pakket toegevoegd aan message queue");
                }
                /*
                 * dit of hij roept een methode aan uit de message handle en dan doet die thread
                 * add dit maakt de code wat consistenter en hoeft er niet op de gelet te worden
                 * op de inconsistenties binnen de array.
                 * dMessageQueue.add(receivePacket);
                 * */
            }

        } catch (Exception ex) {
            logger.severe("Error in listener!");
        }

        /** Close the socket **/
        logger.warning("Socket wordt gesloten: " + dSocket.getPort());
        dSocket.close();
    }
}
